/**
 * 请实现一个函数,将一个字符串中的每个空格替换成"%20".
 * 例如:当字符串为 we are happy ,则经过替换之后的字符串为:
 * we%20are%20happy
 *
 */

/**
 * 替换问题,涉及字符串的移动
 * 因为是' ' -> '%20' 所以先统计原字符串中空格的个数n , 然后计算出新字符串的长度
 * new.length = old.length + 2*n
 * 最后,定义新老指针, 各自指向新老空间的结尾,然后old->new的移动
 * 如果是空格,就连续放入'%20'.其他平移即可
 */
public class suanfa05 {
    public String replaceSpace(StringBuffer str) {
        int count = 0;
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == ' ') {
                count++;
            }
        }
        int NewLength = str.length() + 2*count;
        int oldEnd = str.length()-1;//老字符串最后一个位置
        int newEnd = NewLength-1;//新字符串最后一个位置
        str.setLength(NewLength);//设置字符串大小,防止越界

        while (oldEnd >= 0 && newEnd>= 0) {
            if (str.charAt(oldEnd) == ' ') {
                //当前位置是空格
                str.setCharAt(newEnd--,'0');
                str.setCharAt(newEnd--,'2');
                str.setCharAt(newEnd--,'%');
                --oldEnd;
            }else {
                //如果不是空格 , 平移
                str.setCharAt(newEnd--, str.charAt(oldEnd));
                --oldEnd;
            }
        }
        return str.toString();
    }
    public String replaceSpace2(String s) {
        int length = s.length();
        int count = 0;
        for(int i = 0;i < s.length();i++) {
            if(s.charAt(i) == ' '){
                count++;
            }
        }
        char[] array = new char[length + 2*count];
        int size = 0;
        for (int i = 0; i < length; i++) {
            char c = s.charAt(i);
            if (c == ' ') {
                array[size++] = '%';
                array[size++] = '2';
                array[size++] = '0';
            } else {
                array[size++] = c;
            }
        }
        String newStr = new String(array, 0, size);
        return newStr;
    }
}
